package Text.Test004;

import javax.swing.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

/*
* 斗地主综合案例2：有序版本
* */
public class DouDiZhu2 {
    public static void main(String[] args) {
//        1、准备牌
//        创建一个Map集合，储存牌中的索引和组装好的牌
        HashMap<Integer, String> poker = new HashMap<>();
//        创建一个List集合，存储牌的索引
        ArrayList<Integer> pokerIndex = new ArrayList<>();
//        定义两个集合，存储牌的花色和序号
        List<String> colors = List.of("♠", "♥", "♣", "♦");
        List<String> numbers = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
//        先把大王和小王存储到集合中
//        定义一个牌的索引
        int index = 0;
        poker.put(index, "大王");
        pokerIndex.add(index++);
        poker.put(index, "小王");
        pokerIndex.add(index++);
//        循环嵌套遍历两个集合，组装52长牌子
        for (String num : numbers) {
            for (String color : colors) {
                poker.put(index, color + num);
                pokerIndex.add(index++);
            }
        }
//        System.out.println(poker);
//        System.out.println(pokerIndex);

//        2、洗牌
//        使用Collections中的方法shuffle(List)
        Collections.shuffle(pokerIndex);
//        System.out.println(pokerIndex);

//        3、发牌
//        定义4个集合,存储玩家牌的索引和底牌的索引
        ArrayList<Integer> player01 = new ArrayList<>();
        ArrayList<Integer> player02 = new ArrayList<>();
        ArrayList<Integer> player03 = new ArrayList<>();
        ArrayList<Integer> dipai = new ArrayList<>();
//        遍历寻出牌索引的集合,获取每一个牌的索引
        for (int i = 0; i < pokerIndex.size(); i++) {
            Integer p = pokerIndex.get(i);
            //          轮流发牌，先判断是否给底牌发牌
            if (i >= 51){
                dipai.add(p);
            }else if (i % 3 == 0){
//                给play01发牌
                player01.add(p);
            }else if (i % 3 == 1){
//                给play02发牌
                player02.add(p);
            }else if (i % 3 == 2){
//                给play03发牌
                player03.add(p);
            }
        }

//        4、排序
//        使用Collections中的方法sort(List) 默认升序排序
        Collections.sort(player01);
        Collections.sort(player02);
        Collections.sort(player03);
        Collections.sort(dipai);

//        5、看牌
        LookPoker("张三",poker,player01);
        LookPoker("李四",poker,player02);
        LookPoker("王五",poker,player03);
        LookPoker("底牌",poker,dipai);
    }
    /*
     * 定义一个看牌的方法,提高代码的复用性
     * 参数:
     *      String name : 玩家名称
     *      HashMap<Integer,String> poker : 存储poker的集合
     *      ArrayList<Integer> list : 存储玩家和底牌的List集合
     * */
    public static void LookPoker(String name,HashMap<Integer,String> poker,ArrayList<Integer> list){
//        输出玩家的名称,不换行
        System.out.print(name + ":");
//        遍历玩家或底牌集合,获取牌的索引
        for (Integer key : list) {
            String value = poker.get(key);
            System.out.print(value + " ");
        }
        System.out.println();//换行
    }
}
